import ast

from 程序核心代码.ast节点.节点定义.ast节点结构创建.ast节点结构创建 import 创建赋值节点, 创建注解节点
from 程序核心代码.ast节点.节点定义.基础定义.ast节点基础定义 import ast节点基础模型
from 程序核心代码.mvvm重构.基础定义.节点管理器.自动节点注册表 import 注册节点模型, 节点模型匹配器


@注册节点模型(ast.AnnAssign)
class 类型标注ast节点基础模型(ast节点基础模型):
    """
    处理 ast.AnnAssign 节点的赋值语句节点类。
    """

    def 节点数据解析(self):
        pass

    def __init__(self,ast节点, 所属节点模型管理器,上级节点=None,节点位置=None):
        super().__init__(ast节点, 所属节点模型管理器, "数据类型约束", 上级节点=上级节点,节点位置=节点位置)
        #起始接口.强制数据类型节点:str = 起始接口._ast节点.annotation.id
        self.拆解节点()
        self.关系列表 = {}
        self.是控制节点 = False
        self.复杂度:int = self._ast节点.simple
        self.赋值目标节点 = 节点模型匹配器(self._ast节点.target, self.所属节点模型管理器, 上级节点=self)
        self.数据类型节点 = 节点模型匹配器(self._ast节点.annotation, self.所属节点模型管理器, 上级节点=self)
        if self.数据类型节点 and self.赋值目标节点:
            起始接口 = self.数据类型节点.添加接口到节点("调用流", "输出", 必须连接=True)
            结束接口 = self.赋值目标节点.添加接口到节点("调用流", "输入", 接口名称="强制数据类型", 必须连接=True)
            数据类型设置关系=起始接口.接口创建连接线模型(结束接口, self)
            #起始接口.接口连接线模型列表.update({数据类型设置关系, "数据类型设置"})
    def 拆解节点(self):
        #如果节点具有value属性则删除 并创建新的普通赋值插入到当前路径的下方
        if hasattr(self._ast节点, "value"):
            #获取值内容
            值内容 = self._ast节点.value
            #获取赋值目标
            赋值目标 = self._ast节点.target
            新的赋值节点= 创建赋值节点(赋值目标, 值内容)
            # 删除当前节点 创建新的节点重新解析
            注解节点=创建注解节点(赋值目标, self._ast节点.annotation, self._ast节点.simple)

            结构树位置 = self.所属节点模型管理器._ast节点.index(self._ast节点)
            self.所属节点模型管理器._ast节点[结构树位置] = 注解节点
            self.所属节点模型管理器._ast节点.insert(结构树位置 + 1, 新的赋值节点)
    # def 节点删除关系(起始接口,要删除的关系):
    #     起始接口.所属节点模型管理器.ast操作器.删除节点(起始接口.节点路径)
